package com.orzxlee.Stream04;

import java.util.*;
import java.util.stream.Stream;

/*
    第五节 Stream流

        综合练习

        需求:
            现有两个ArrayList集合,分别存储6名男演员和6名女演员.
            1.男演员只要名字为3个字,且前三名
            2.女演员只要姓林的,并且不要第一个
            3.把过滤后的男演员和女演员合并到一起
            4.把上一步操作后的元素作为构造方法的参数,创建演员对象,遍历数据



 */
public class Demo {
    public static void main(String[] args) {

        //1.Collection体系的集合可以使用默认方法stream()生成流
        ArrayList<String> manList = new ArrayList<>();
        manList.add("周润发");
        manList.add("成龙");
        manList.add("刘德华");
        manList.add("吴京");
        manList.add("周星驰");
        manList.add("李连杰");

        ArrayList<String> womanList = new ArrayList<>();
        womanList.add("林心如");
        womanList.add("张曼玉");
        womanList.add("林青霞");
        womanList.add("柳岩");
        womanList.add("林志玲");
        womanList.add("王祖贤");

//      1.男演员只要名字为3个字,且前三名
        Stream<String> manStream = manList.stream().filter(s -> s.length() == 3).limit(3);
//      2.女演员只要姓林的,并且不要第一个
        Stream<String> womanStream = womanList.stream().filter(s -> s.startsWith("林")).skip(1);
//      3.把过滤后的男演员和女演员合并到一起
        Stream<String> concat = Stream.concat(manStream, womanStream);
//      4.把上一步操作后的元素作为构造方法的参数,创建演员对象,遍历数据
        //concat.map(Actor::new).forEach(actor -> System.out.println(actor));
        //合并写法
        Stream.concat(manList.stream().filter(s -> s.length() == 3).limit(3),
                womanList.stream().filter(s -> s.startsWith("林")).skip(1)).
                map(Actor::new).forEach(System.out::println);
    }
}
